﻿/*
SINACOR - BMF&Bovespa
Arquivo: RelacionamentoBroker.cs
Criado em: 26-mai-2010 17:49:31
Arquiteto Responsável: p-wgeneroso
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation.BusinessRules;

namespace Sinacor.Servico.Bovespa.Cliente.BusinessLogic
{
    public class RelacionamentoBroker : BaseBusinessLogic
    {
        #region Construtores

        public RelacionamentoBroker()
        {
        }

        #endregion

        #region Métodos

        /// 
        /// <param name="entity"></param>
        public void AlterarRelacionamentoBroker(BusinessEntity.RelacionamentoBroker entity)
        {
            ResourceAccess.RelacionamentoBroker raRelacionamentoBroker = null;
            BusinessRulesValidator validador = null;
            BusinessRuleValidation.BrokerClienteValido valBrokerClienteValido = null;
            BusinessRuleValidation.ParametroInformado<BusinessEntity.RelacionamentoBroker> valParametroInformado = new BusinessRuleValidation.ParametroInformado<BusinessEntity.RelacionamentoBroker>();
            BusinessRuleValidation.ExisteRelacionamentoBroker valExisteRelacionamentoBroker = new BusinessRuleValidation.ExisteRelacionamentoBroker();

            valParametroInformado.Entidade = entity;
            valExisteRelacionamentoBroker.EntityToValidate = entity;

            validador = new BusinessRulesValidator();
            validador.AddValidation("ParametroInformado", valParametroInformado);
            
            validador.Validate();
            validador.ClearAllErrors();
            validador.RemoveAllValidations();

            validador.AddValidation("ExisteRelacionamentoBroker", valExisteRelacionamentoBroker);

            if (entity.CodigoBrokerCliente.HasValue)
            {
                valBrokerClienteValido = new BusinessRuleValidation.BrokerClienteValido();
                valBrokerClienteValido.EntityToValidate = entity;
                validador.AddValidation("BrokerClienteValido", valBrokerClienteValido);
            }

            validador.Validate();

            raRelacionamentoBroker = new ResourceAccess.RelacionamentoBroker();
            raRelacionamentoBroker.AlterarRelacionamentoBroker(entity);
        }

        /// 
        /// <param name="entity"></param>
        public List<BusinessEntity.RelacionamentoBroker> ConsultarRelacionamentosBroker(BusinessEntity.Parameter.FiltroRelacionamentoBroker entity)
        {
            ResourceAccess.RelacionamentoBroker raRelacionamentoBroker = null;
            BusinessRulesValidator validador = null;
            BusinessRuleValidation.ParametroInformado<BusinessEntity.Parameter.FiltroRelacionamentoBroker> valParametroInformado = new BusinessRuleValidation.ParametroInformado<BusinessEntity.Parameter.FiltroRelacionamentoBroker>();

            valParametroInformado.Entidade = entity;

            validador = new BusinessRulesValidator();
            validador.AddValidation("ParametroInformado", valParametroInformado);

            validador.Validate();

            raRelacionamentoBroker = new ResourceAccess.RelacionamentoBroker();
            return raRelacionamentoBroker.ConsultarRelacionamentosBroker(entity);
        }

        /// 
        /// <param name="entity"></param>
        public void ExcluirRelacionamentoBroker(BusinessEntity.Parameter.FiltroRelacionamentoBrokerChave entity)
        {
            ResourceAccess.RelacionamentoBroker raRelacionamentoBroker = null;
            BusinessRulesValidator validador = null;
            BusinessRuleValidation.ParametroInformado<BusinessEntity.Parameter.FiltroRelacionamentoBrokerChave> valParametroInformado = new BusinessRuleValidation.ParametroInformado<BusinessEntity.Parameter.FiltroRelacionamentoBrokerChave>();
            BusinessRuleValidation.FiltrosObrigatoriosRelacionamentoBroker valFiltrosObrigatoriosRelacionamentoBroker = new BusinessRuleValidation.FiltrosObrigatoriosRelacionamentoBroker();
            BusinessRuleValidation.ExisteRelacionamentoBroker valExisteRelacionamentoBroker = new BusinessRuleValidation.ExisteRelacionamentoBroker();

            valParametroInformado.Entidade = entity;
            valFiltrosObrigatoriosRelacionamentoBroker.EntityToValidate = entity;
            valExisteRelacionamentoBroker.EntityToValidate = new BusinessEntity.RelacionamentoBroker
                                                                                        {
                                                                                            CodigoBrokerIntermediario = entity.CodigoBrokerIntermediario,
                                                                                            CodigoBrokerPrincipal = entity.CodigoBrokerPrincipal
                                                                                        };

            validador = new BusinessRulesValidator();
            validador.AddValidation("ParametroInformado", valParametroInformado);

            validador.Validate();
            validador.ClearAllErrors();
            validador.RemoveAllValidations();

            validador.AddValidation("FiltrosObrigatoriosRelacionamentoBroker", valFiltrosObrigatoriosRelacionamentoBroker);
            validador.AddValidation("ExisteRelacionamentoBroker", valExisteRelacionamentoBroker);

            validador.Validate();

            raRelacionamentoBroker = new ResourceAccess.RelacionamentoBroker();
            raRelacionamentoBroker.ExcluirRelacionamentoBroker(entity);
        }

        /// 
        /// <param name="entity"></param>
        public void IncluirRelacionamentoBroker(BusinessEntity.RelacionamentoBroker entity)
        {
            ResourceAccess.RelacionamentoBroker raRelacionamentoBroker = null;
            BusinessRulesValidator validador = null;
            BusinessRuleValidation.BrokerClienteValido valBrokerClienteValido = null;
            BusinessRuleValidation.ParametroInformado<BusinessEntity.RelacionamentoBroker> valParametroInformado = new BusinessRuleValidation.ParametroInformado<BusinessEntity.RelacionamentoBroker>();
            BusinessRuleValidation.NaoExisteRelacionamentoBroker valNaoExisteRelacionamentoBroker = new BusinessRuleValidation.NaoExisteRelacionamentoBroker();
            BusinessRuleValidation.CamposObrigatoriosRelacionamentoBroker valCamposObrigatoriosRelacionamentoBroker = new BusinessRuleValidation.CamposObrigatoriosRelacionamentoBroker();
            BusinessRuleValidation.BrokerPrincipalValido valBrokerPrincipalValido = new BusinessRuleValidation.BrokerPrincipalValido();
            BusinessRuleValidation.ExisteBrokerIntermediarioCadastrado valExisteBrokerIntermediarioCadastrado = new BusinessRuleValidation.ExisteBrokerIntermediarioCadastrado();

            valParametroInformado.Entidade = entity;
            valNaoExisteRelacionamentoBroker.EntityToValidate = entity;
            valCamposObrigatoriosRelacionamentoBroker.EntityToValidate = entity;
            valBrokerPrincipalValido.EntityToValidate = entity;
            valExisteBrokerIntermediarioCadastrado.EntityToValidate = entity;

            validador = new BusinessRulesValidator();
            validador.AddValidation("ParametroInformado", valParametroInformado);

            validador.Validate();
            validador.ClearAllErrors();
            validador.RemoveAllValidations();

            validador.AddValidation("NaoExisteRelacionamentoBroker", valNaoExisteRelacionamentoBroker);
            validador.AddValidation("CamposObrigatoriosRelacionamentoBroker", valCamposObrigatoriosRelacionamentoBroker);
            validador.AddValidation("BrokerPrincipalValido", valBrokerPrincipalValido);
            validador.AddValidation("ExisteBrokerIntermediarioCadastrado", valExisteBrokerIntermediarioCadastrado);

            if (entity.CodigoBrokerCliente.HasValue)
            {
                valBrokerClienteValido = new BusinessRuleValidation.BrokerClienteValido();
                valBrokerClienteValido.EntityToValidate = entity;
                validador.AddValidation("BrokerClienteValido", valBrokerClienteValido);
            }

            validador.Validate();

            raRelacionamentoBroker = new ResourceAccess.RelacionamentoBroker();
            raRelacionamentoBroker.IncluirRelacionamentoBroker(entity);
        }

        /// 
        /// <param name="entity"></param>
        public BusinessEntity.RelacionamentoBroker ObterRelacionamentoBroker(BusinessEntity.Parameter.FiltroRelacionamentoBrokerChave entity)
        {
            List<BusinessEntity.RelacionamentoBroker> retornoConsulta = null;
            BusinessEntity.RelacionamentoBroker retorno = null;

            ResourceAccess.RelacionamentoBroker raRelacionamentoBroker = null;
            BusinessRulesValidator validador = null;
            BusinessRuleValidation.ParametroInformado<BusinessEntity.Parameter.FiltroRelacionamentoBrokerChave> valParametroInformado = new BusinessRuleValidation.ParametroInformado<BusinessEntity.Parameter.FiltroRelacionamentoBrokerChave>();
            BusinessRuleValidation.FiltrosObrigatoriosRelacionamentoBroker valFiltrosObrigatoriosRelacionamentoBroker = new BusinessRuleValidation.FiltrosObrigatoriosRelacionamentoBroker();

            valParametroInformado.Entidade = entity;
            valFiltrosObrigatoriosRelacionamentoBroker.EntityToValidate = entity;

            validador = new BusinessRulesValidator();
            validador.AddValidation("ParametroInformado", valParametroInformado);

            validador.Validate();
            validador.ClearAllErrors();
            validador.RemoveAllValidations();

            validador.AddValidation("FiltrosObrigatoriosRelacionamentoBroker", valFiltrosObrigatoriosRelacionamentoBroker);

            validador.Validate();

            raRelacionamentoBroker = new ResourceAccess.RelacionamentoBroker();
            retornoConsulta = raRelacionamentoBroker.ConsultarRelacionamentosBroker(new BusinessEntity.Parameter.FiltroRelacionamentoBroker
                                                                                                            {
                                                                                                                CodigoBrokerIntermediario = entity.CodigoBrokerIntermediario,
                                                                                                                CodigoBrokerPrincipal = entity.CodigoBrokerPrincipal
                                                                                                            });

            if (retornoConsulta != null
                && retornoConsulta.Count > 0)
            {
                retorno = retornoConsulta[0];
            }

            return retorno;
        }

        #endregion
    }
}